package client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;

/*
 * Ce Thread récupère toutes les informations concernant la partie
 */
public class ThreadConnection extends Thread {

	private Socket s;
	private InputStream in;
	private OutputStream out;
	private String jeton;
	private char type;
	private String nom;
	
	private int id_joueur;
	private ArrayList<Joueur> joueurs;
	
	public ThreadConnection(Socket s, String j, char t, String nom)  throws IOException{
		// TODO Auto-generated constructor stub
		this.s = s;
		this.jeton = j;
		this.type = t;
		this.nom = nom;
		in = s.getInputStream();
		//out = new DataOutputStream(s.getOutputStream());
		out = s.getOutputStream();
	}
	
	public void run() {
		/*
		 protocole:
		 send nom
		 receive id
		 receive grille
		 receive nb_joueur
		 pour chaque joueur
		 	receive id
		 	receive x, y
		 */
		try {
			joueurs = new ArrayList<Joueur>();
			System.out.println("D�but envoi sur "+s.toString());
			//out.writeInt(3);
			String msg = jeton + ":" + type + ":" + nom;
			System.out.println("Envoi vers "+s.toString()+": "+msg);
			out.write(msg.getBytes());
			byte[] b = new byte[1024];
			in.read(b);
			String rep = new String(b);
			System.out.println("Recu: "+rep);
			String[] tab_rep = rep.split("\\|");
			int k;
			for (k=0;k<tab_rep.length;k++)
				System.out.println(tab_rep[k]);
			if (tab_rep[1].equals("ok"))
			{
				String info = tab_rep[2];
				System.out.println(info);
				String[] res = info.split("@");
				//System.out.println(res.toString());
				id_joueur = Integer.parseInt(res[0]);
				String[] coordonnees = res[1].split(",");
				int r = Integer.parseInt(coordonnees[0]);
				int c = Integer.parseInt(coordonnees[1]);
				
				System.out.println("ThreadConnection: Ajout "+id_joueur+" "+r+","+c);
				this.joueurs.add(new Joueur(id_joueur, type, nom, r, c));
				
				String[] t_joueurs = res[2].split(";");
				int i;
				int id_j, r_j, c_j;
				char t_j;
				String nom_j;
				for (i=0;i<t_joueurs.length;i++)
				{
					String[] info_j = t_joueurs[i].split(":");
					id_j = Integer.parseInt(info_j[0]);
					t_j = info_j[2].charAt(0);
					nom_j = info_j[1];
					String[] co_j = info_j[3].split(",");
					r_j = Integer.parseInt(co_j[0]);
					c_j = Integer.parseInt(co_j[1]);
					System.out.println("ThreadConnection: Ajout "+id_j+" "+t_j+" "+nom_j+" "+r_j+","+c_j);
					this.joueurs.add(new Joueur(id_j, t_j, nom_j, r_j, c_j));
				}
				in.close();
				out.close();
				System.out.println("Fin envoi sur "+s.toString());
			}
			else
			{
				System.out.println("Probl�me connection: reponse negative");
			}
		}
		catch (IOException e) {
			System.out.println("Probl�me envoi: "+e.toString());
			e.printStackTrace();
		}
		finally {
			try {
				System.out.println("ThreadConnexion: Fermeture socket...");
				s.close();
				System.out.println("ThreadConnexion: Fermeture socket termin�e");
			}
			catch (IOException e) {
				System.out.println("Probleme fermeture socket.");
			}
		}
	}

	public int getId_joueur() {
		return id_joueur;
	}

	public ArrayList<Joueur> getJoueurs() {
		return joueurs;
	}

}
